package com.example.util;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.format.datetime.joda.MillisecondInstantPrinter;

public class StringUtils {

	/**
	 * 把list转换成字符串
	 * 
	 * @author xiaozhijun
	 * @Date: 2016年10月8日 上午10:55:49
	 * @param strings
	 * @return
	 */
	public static final <T>String list2String(List<T> strings){
		if(!JudgeEmpty.collectIsEmpty(strings)){
			StringBuffer stringBuffer = new StringBuffer();
			stringBuffer.append("[");
			for(int i = 0; i < strings.size(); i++){
				stringBuffer.append(strings.get(i));
				if(i != strings.size() - 1){
					stringBuffer.append(",");
				}
			}
			stringBuffer.append("]");
			return stringBuffer.toString();
		}
		return "";
	}
	
	/**
	 * 把list转换成字符串
	 * 
	 * @author xiaozhijun
	 * @Date: 2016年10月8日 上午10:55:49
	 * @param strings
	 * @return
	 */
	public static final <T>String list2StringNoQ(List<Integer> strings){
		if(!JudgeEmpty.collectIsEmpty(strings)){
			StringBuffer stringBuffer = new StringBuffer();
			for(int i = 0; i < strings.size(); i++){
				stringBuffer.append(strings.get(i));
				if(i != strings.size() - 1){
					stringBuffer.append(",");
				}
			}
			return stringBuffer.toString();
		}
		return "";
	}
	
	/**
	 * List转数组
	 * 
	 * @author xiaozhijun
	 * @Date: 2017年11月27日 下午4:08:58
	 * @param values
	 * @return
	 */
	public static final String[] list2Array(List<String> values){
		String[] valueArray = new String[values.size()];
		for(int i = 0; i < values.size(); i++){
			valueArray[i] = values.get(i);
		}
		
		return valueArray;
	}
	
	/**
	 * 把list转换成字符串
	 * 
	 * @author xiaozhijun
	 * @Date: 2016年10月8日 上午10:55:49
	 * @param strings
	 * @return
	 */
	public static final <T>String list2StringSmall(List<T> strings){
		if(!JudgeEmpty.collectIsEmpty(strings)){
			StringBuffer stringBuffer = new StringBuffer();
			stringBuffer.append("(");
			for(int i = 0; i < strings.size(); i++){
				stringBuffer.append("'").append(strings.get(i)).append("'");
				if(i != strings.size() - 1){
					stringBuffer.append(",");
				}
			}
			stringBuffer.append(")");
			return stringBuffer.toString();
		}
		return "";
	}
	
	public static final <T>String list2StringSingleQuot(List<T> strings){
		if(!JudgeEmpty.collectIsEmpty(strings)){
			StringBuffer stringBuffer = new StringBuffer();
			for(int i = 0; i < strings.size(); i++){
				stringBuffer.append("'").append(strings.get(i)).append("'");
				if(i != strings.size() - 1){
					stringBuffer.append(",");
				}
			}
			return stringBuffer.toString();
		}
		return "";
	}
	
	/**
	 * list转字符串带引号
	 * 
	 * @author xiaozhijun
	 * @Date: 2016年10月8日 下午1:27:19
	 * @param strings
	 * @return
	 */
	public static final <T> String list2StringQout(List<T> strings){
		if(!JudgeEmpty.collectIsEmpty(strings)){
			StringBuffer stringBuffer = new StringBuffer();
			stringBuffer.append("[");
			for(int i = 0; i < strings.size(); i++){
				stringBuffer.append("\"").append(strings.get(i)).append("\"");
				if(i != strings.size() - 1){
					stringBuffer.append(",");
				}
			}
			stringBuffer.append("]");
			return stringBuffer.toString();
		}
		return "";
	}
	
	/**
	 * String 转List
	 * 
	 * @author xiaozhijun
	 * @Date: 2017年1月5日 上午10:55:25
	 * @param data
	 * @return
	 */
	public static final List<String> string2List(String data){
		List<String> result = new ArrayList<String>();
		if(data.contains(",")){
			String[] dataArray = data.split(",");
			for(String id: dataArray){
				result.add(id);
			}
		}else{
			result.add(data);
		}
		
		return result;
	}
	
	/**
	 * 字符串转list
	 * 
	 * @author xiaozhijun
	 * @Date: 2017年2月23日 下午3:58:18
	 * @param data
	 * @return
	 */
	public static final List<Integer> String2ListInteger(String data){
		List<Integer> result = new ArrayList<Integer>();
		if(data.contains(",")){
			String[] dataArray = data.split(",");
			for(String id: dataArray){
				result.add(Integer.parseInt(id));
			}
		}else{
			result.add(Integer.parseInt(data));
		}
		
		return result;
	}
	
	/**
	 * 生成6位数的随机密码
	 * 
	 * 
	 * @author xiaozhijun
	 * @Date: 2017年9月8日 上午11:53:46
	 * @return
	 */
	public static final String createCode(){
		return String.valueOf((int)((Math.random()*9+1)*100000));
	}
	
	public static final String replaceEmoji(String str) {
        String patternString = "[\uD83C\uDC04-\uD83C\uDE1A]|[\uD83D\uDC66-\uD83D\uDC69]|[\uD83D\uDC66\uD83C\uDFFB-\uD83D\uDC69\uD83C\uDFFF]|[\uD83D\uDE45\uD83C\uDFFB-\uD83D\uDE4F\uD83C\uDFFF]|[\uD83C\uDC00-\uD83D\uDFFF]|[\uD83E\uDD10-\uD83E\uDDC0]|[\uD83D\uDE00-\uD83D\uDE4F]|[\uD83D\uDE80-\uD83D\uDEF6]";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);
        return matcher.replaceAll("");
    }
	
	/**
	 * 字符串转成指定长度， 取字符串前面指定长度，不足前面补0
	 * 
	 * @author tcf
	 * @Date 2018年5月8日 上午11:53:46
	 * @param str   要转换的字符串
	 * @param length  指定长度
	 * @return
	 */
	public static final String getSpecifiedLengthString(String str,int length){
		int strLen =str.length();
			if(strLen > length){
				str = str.substring(0,length);
				return str;
			}
		   while (strLen< length) {  
		    StringBuffer sb = new StringBuffer();  
		    sb.append("0").append(str);//左补0
		    str= sb.toString();  
		    strLen= str.length();  
		   }  
		return str;
	}

	/**
	 * 截取某个字符串之前的数据
	 * 
	 * @param str 需要截取的字段
	 * @param strBefore	截取此字符串之前的，以第一个为准
	 * @return
	 */
	public static String substringBefore(String str, String strBefore) {
		int len = str.indexOf(strBefore);
		str = str.substring(0, len);
		return str;
	}
	
	/**
	 * 截取两个字符串之间的数据
	 * 
	 * @param str
	 * @param strBegin
	 * @param strEnd
	 * @return
	 */
	public static String substringBetween(String str, String strBegin ,String strEnd) {
		int lenBegin = str.indexOf(strBegin);
		int lenEnd = str.indexOf(strEnd);
		str = str.substring(lenBegin + strBegin.length(), lenEnd);
		return str;
	}
	
	/**
	 * 按指定的分隔符，将字符串转为数组
	 * 
	 * @param data
	 * @param s
	 * @return
	 */
	public static final List<String> stringToList(String data,String separator){
		List<String> result = new ArrayList<String>();
		if(data.contains(separator)){
			String[] dataArray = data.split(separator);
			for(String id: dataArray){
				result.add(id);
			}
		}else{
			result.add(data);
		}
		
		return result;
	}
	
	/**
	 * 截取字符串末尾 n位，不足前面补0
	 * 
	 * @author tcf
	 * @Date 2018年6月5日 下午2:25:40
	 * @param str
	 * @param length
	 * @return
	 */
	public static final String getStringLengthEnd(String str,int length){
		int strLen =str.length();
			if(strLen > length){
				str = str.substring(strLen - length,strLen);
				return str;
			}
		   while (strLen< length) {  
		    StringBuffer sb = new StringBuffer();  
		    sb.append("0").append(str);//左补0
		    str= sb.toString();  
		    strLen= str.length();  
		   }  
		return str;
	}

	
	/** 
	* 改变字符串首字母大小写
	* @param str
	* @param mode 1 大写，2(或其他)小写
	* @return String
	* @author liuhuaqing
	* @date 2018年6月14日下午1:51:32
	*/ 
	public static final String changeFirstChar(String str, int mode)
	{
		if(mode==1)
		{
			return (new StringBuilder()).append(Character.toUpperCase(str.charAt(0))).append(str.substring(1)).toString();

		}else
		{
			return (new StringBuilder()).append(Character.toLowerCase(str.charAt(0))).append(str.substring(1)).toString();

		}
	}
	
	
	/** 
	* 首字母小写，获取驼峰字符串
	* @param str
	* @return String
	* @author liuhuaqing
	* @date 2018年6月14日下午1:57:30
	*/ 
	public static final String getCamelStr(String str)
	{
		String newStr=changeFirstChar(str, 2);
		StringBuilder builder=new StringBuilder();
		for(int i=0;i<newStr.length();i++)
		{
			char item=newStr.charAt(i);
			if(Character.isUpperCase(item))
			{
				
				builder.append("_"+Character.toLowerCase(item));
			}else
			{
				builder.append(item);
			}
		}
		return builder.toString();
	}
	
	public static void main(String[] args) {
		//System.out.println("105910200240651000000000000000".length());
		//System.out.println(StringUtils.getStringLengthEnd("30819c300d06092a864886f70d010101050003818a0030818602818056d327da41335aca9e45dfeb5c23349bed804de645fdfb391f9c63eadb5069483b5843e2b98e7a11c813ed4c9fb5776288aae28f6980c9b5e1367a5bbe65cd00a5e05e083af976cf165d14e626be27041c3248a201ea6b1d4715b956869b5e357291f97524861de2fe98648d429811737dd93ddcfcdd95cf7aa5f1cd412ef9ef020111", 30));
		
		String str="AAbBcCa";
		System.out.println(getCamelStr(str));
	
	}
}
